package com.supermarket.mapper;

import com.supermarket.entity.OrderDelivery;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 订单配送信息Mapper接口
 */
@Mapper
public interface OrderDeliveryMapper {
    /**
     * 创建订单配送信息
     * @param orderDelivery 配送信息
     * @return 影响行数
     */
    int insertOrderDelivery(OrderDelivery orderDelivery);
    
    /**
     * 更新订单配送信息
     * @param orderDelivery 配送信息
     * @return 影响行数
     */
    int updateOrderDelivery(OrderDelivery orderDelivery);
    
    /**
     * 根据ID查询配送信息
     * @param id 配送ID
     * @return 配送信息
     */
    OrderDelivery selectOrderDeliveryById(@Param("id") Integer id);
    
    /**
     * 根据订单ID查询配送信息
     * @param orderId 订单ID
     * @return 配送信息
     */
    OrderDelivery selectOrderDeliveryByOrderId(@Param("orderId") Integer orderId);
    
    /**
     * 根据骑手ID查询配送信息列表
     * @param riderId 骑手ID
     * @return 配送信息列表
     */
    List<OrderDelivery> selectOrderDeliveriesByRiderId(@Param("riderId") Integer riderId);
    
    /**
     * 根据配送状态查询配送信息列表
     * @param deliveryStatus 配送状态
     * @return 配送信息列表
     */
    List<OrderDelivery> selectOrderDeliveriesByStatus(@Param("deliveryStatus") String deliveryStatus);
    
    /**
     * 查询骑手特定状态的配送信息
     * @param riderId 骑手ID
     * @param deliveryStatus 配送状态
     * @return 配送信息列表
     */
    List<OrderDelivery> selectOrderDeliveriesByRiderIdAndStatus(@Param("riderId") Integer riderId, @Param("deliveryStatus") String deliveryStatus);
    
    /**
     * 更新配送状态
     * @param id 配送ID
     * @param deliveryStatus 配送状态
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updateDeliveryStatus(@Param("id") Integer id, @Param("deliveryStatus") String deliveryStatus, @Param("updateTime") Date updateTime);
    
    /**
     * 分配骑手
     * @param id 配送ID
     * @param riderId 骑手ID
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int assignRider(@Param("id") Integer id, @Param("riderId") Integer riderId, @Param("updateTime") Date updateTime);
    
    /**
     * 更新取件时间
     * @param id 配送ID
     * @param pickupTime 取件时间
     * @return 影响行数
     */
    int updatePickupTime(@Param("id") Integer id, @Param("pickupTime") Date pickupTime);
    
    /**
     * 更新预计送达时间
     * @param id 配送ID
     * @param estimatedDeliveryTime 预计送达时间
     * @return 影响行数
     */
    int updateEstimatedDeliveryTime(@Param("id") Integer id, @Param("estimatedDeliveryTime") Date estimatedDeliveryTime);
    
    /**
     * 更新实际送达时间
     * @param id 配送ID
     * @param actualDeliveryTime 实际送达时间
     * @return 影响行数
     */
    int updateActualDeliveryTime(@Param("id") Integer id, @Param("actualDeliveryTime") Date actualDeliveryTime);
    
    /**
     * 评价骑手
     * @param id 配送ID
     * @param riderRating 骑手评分
     * @param riderComment 骑手评价
     * @return 影响行数
     */
    int rateRider(@Param("id") Integer id, @Param("riderRating") Integer riderRating, @Param("riderComment") String riderComment);
} 